zabbix监控多tomcat实例

首先得介绍一下zabbix自动探索功能,举个例子,一台服务器需要监控的根目录的磁盘容量,先自定义一个key:

  1. UserParameter=disk_use[*],/usr/local/disk_use.sh $1 #disk_use是自定义的key,之后的是取值脚本 [*]代表着脚本的入参变量 $1是给这个脚本入参的变量数 该脚本的功能是根据入参变量得出磁盘容量大小

,然后就能获取到使用情况了。但是服务器监控磁盘容量的话,肯定不会让你只监控一个根目录,比如还有/data目录,/proc目录…等等,每台服务器的情况都不同。这时候就需要使用自动探索功能了。针对这样的情况,需要定义2个key:

  1. UserParameter=dir_name,/usr/local/dir_name.sh #该脚本功能是获取目录名,并输出json格式
  2. UserParameter=disk_use[*],,/usr/local/disk_use.sh $1 #脚本功能不变,$1的参数由dir_name.sh获取,这样的话就可以监控多个目录磁盘容量

下面是监控多tomcat实例的内容,

  • 修改zabbix_agent配置
  1. vim /data/zabbix/etc/zabbix_agentd.conf
  2. Include=/data/zabbix/etc/zabbix_agentd.conf.d/*.conf #开启子配置文件的路径
  3. UnsafeUserParameters=1 #允许所有字符参数的传递
  • 自定义key值
  1. vim /data/zabbix/etc/zabbix_agentd.conf.d/jvm.conf
  2. UserParameter=jvm.name,/data/zabbix/shell/jvm_name.sh #获取tomcat名,并输出json格式
  3. UserParameter=jvm.thread.num[*],/data/zabbix/shell/jvm_thread_num.sh $1 $2 #脚本功能取tomcat线程数
  4. UserParameter=jvm.status[*],/data/zabbix/shell/jvm_status.sh $1 $2 #脚本功能取tomcat状态
  • 脚本内容
    • jvm_name.sh
  1. #!/bin/bash
  2. tomcat_name=`ps -ef | grep tomcat | grep -v grep | awk -F "=" '{print $NF}' | cut -d "/" -f 3`
  3. flag=0
  4. count=`ps -ef | grep tomcat | grep -v grep | wc -l`
  5. if [ $count == 0 ];then
  6. exit
  7. fi
  8. echo '{"data":['
  9. echo "$tomcat_name" |while read LINE;do
  10. echo -n '{"{#JVMNAME}":"'$LINE'"}'
  11. flag=`expr $flag + 1`
  12. if [ $flag -lt $count ];then
  13. echo ','
  14. fi
  15. done
  16. echo ']}'
  • jvm_thread_num.sh
  1. #!/bin/sh
  2. jvmname=$1
  3. pid=`ps -ef | grep "$jvmname" | grep -v grep | grep -v "$0"| awk '{print $2}' `
  4. jvm_status=`sudo -u ody /usr/local/java/jdk1.7.0_80/bin/jstack "$pid" > /data/zabbix/shell/jstack.txt`
  5. function all {
  6. cat /data/zabbix/shell/jstack.txt | grep http|wc -l
  7. }
  8. function runnable {
  9. cat /data/zabbix/shell/jstack.txt | grep http|grep runnable|wc -l
  10. }
  11. $2
  • jvm_status.sh #该脚本是通过读取文件来获取值的,文件生成是另外一个任务计划的脚本jstat.sh生成的,因为通过实时运行脚本的话,对系统资源消耗过大,所以通过这种方式来获取
  1. #!/bin/bash
  2. t=$1
  3. jvm_key=$2
  4. cat /data/zabbix/txt/"$t".gc | grep -w "$jvm_key" | awk '{print $2}'
  • jstat.sh 将该脚本加入任务计划每分钟执行一次
  1. #!/bin/bash
  2. tomcat_name=`ps -ef | grep tomcat | grep -v grep | grep -v "jvm_status.sh" | awk -F "=" '{print $NF}' | cut -d "/" -f 3`
  3. for t in ${tomcat_name[@]};do
  4. t_id=`ps -ef | grep "$t/" | grep -v "grep" | awk '{print $2}'`
  5. /usr/local/java/jdk1.7.0_80/bin/jstat -gc $t_id | awk 'BEGIN{FS=" "}{for(i = 1;i <= NF;i++) {array[i,NR]=$i}}END {for(i = 1;i <= NF;i++) {for(j = 1;j <= NR;j++) {printf "%s ",array[i,j]}printf "\n"}}' > /data/zabbix/txt/"$t".gc
  6. done
  • 最后重启agentd,并将服务器关联模板即可




posted @ 2016-11-24 17:29  非黑即白  阅读(1449)  评论(0编辑  收藏  举报